iT邦幫忙

2024 iThome 鐵人賽

DAY 17
0

在第 17 天,我們將專注於學習如何處理用戶輸入,這是讓 Line Bot 能夠更智能地與用戶互動的基礎。通過這些步驟,你可以讓 Bot 根據用戶的輸入做出不同的響應,並實現基本的對話流程。

步驟 1:處理基本用戶輸入

  1. 接收文本消息

    • 首先,你需要確保你的 Bot 能夠處理來自用戶的文字消息。這通常是通過 LINE Messaging API 的 MessageEvent 來實現的。

    例子:

    @handler.add(MessageEvent, message=TextMessage)
    def handle_text_message(event):
        user_message = event.message.text  # 獲取用戶發送的文字內容
        reply_message = f"你剛才說了: {user_message}"  # 構建回覆內容
        line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_message))
    
  2. 關鍵詞匹配

    • 可以根據關鍵詞匹配來觸發不同的響應,這能讓 Bot 更具靈活性。例如,如果用戶說「天氣」,Bot 可以回應當前天氣資訊;如果用戶說「時間」,Bot 可以回應當前時間。

    例子:

    if "天氣" in user_message:
        reply_message = "今天的天氣是晴天!"
    elif "時間" in user_message:
        reply_message = "現在的時間是 " + datetime.now().strftime('%H:%M:%S')
    else:
        reply_message = "抱歉,我不明白你的意思。"
    
  3. 模式識別

    • 利用正則表達式來匹配更複雜的用戶輸入模式,例如數字、日期或特定格式的句子,這樣可以處理更多樣化的輸入場景。

    例子:

    import re
    
    if re.match(r'\d+ \+ \d+', user_message):
        numbers = list(map(int, re.findall(r'\d+', user_message)))
        result = sum(numbers)
        reply_message = f"計算結果:{result}"
    

步驟 2:處理不同的消息類型

  1. 圖片消息

    • 除了文本,還可以處理圖片消息,讓 Bot 對用戶發送的圖片進行識別或回應。

    例子:

    @handler.add(MessageEvent, message=ImageMessage)
    def handle_image_message(event):
        reply_message = "收到你的圖片了!"
        line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_message))
    
  2. 其他消息類型

    • 同樣,Bot 也可以處理位置、影片或語音消息,每種消息都可以根據其類型進行不同的處理。

    例子:

    @handler.add(MessageEvent, message=LocationMessage)
    def handle_location_message(event):
        latitude = event.message.latitude
        longitude = event.message.longitude
        reply_message = f"你的位置是經度 {longitude}, 緯度 {latitude}"
        line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_message))
    

步驟 3:儲存用戶狀態

為了能夠根據用戶的上下文進行回應,你可能需要儲存用戶的狀態。例如,用戶可能會先問一個問題,然後在後續的對話中進行跟進。你可以使用字典或資料庫來存儲用戶的狀態,實現連續對話。

例子:

user_states = {}

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    user_id = event.source.user_id
    user_message = event.message.text

    if user_id not in user_states:
        user_states[user_id] = "等待問題"
    
    if user_states[user_id] == "等待問題":
        user_states[user_id] = "回答問題"
        reply_message = "請問有什麼問題我可以幫忙?"
    elif user_states[user_id] == "回答問題":
        reply_message = f"關於 {user_message} 的問題我會幫你找答案。"
        user_states[user_id] = "等待問題"

    line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_message))

上一篇
Day 15: 強化 Line Bot 功能
下一篇
Day 18: 實現更複雜的對話邏輯
系列文
從無到有,LINE著不走30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言